package com.hengpeng.itfin.domain.partner;

import com.hengpeng.itfinbase.message.ResponseMessage;
import com.hengpeng.itfinbase.message.partner.AddBidInfoRequest;
import com.hengpeng.itfinbase.message.partner.AddBidInfoResponse;
import com.hengpeng.itfinbase.message.partner.BindCardRequest;
import com.hengpeng.itfinbase.message.partner.CashRequestMsg;
import com.hengpeng.itfinbase.message.partner.CorpOpenRequestMsg;
import com.hengpeng.itfinbase.message.partner.CorpRegisterQueryRequest;
import com.hengpeng.itfinbase.message.partner.CreditAssignRequest;
import com.hengpeng.itfinbase.message.partner.CreditAssignResponse;
import com.hengpeng.itfinbase.message.partner.DrawReconciliationRequestMsg;
import com.hengpeng.itfinbase.message.partner.DrawReconciliationResponseMsg;
import com.hengpeng.itfinbase.message.partner.InvestInfoRequestMsg;
import com.hengpeng.itfinbase.message.partner.InvestInfoResponseMsg;
import com.hengpeng.itfinbase.message.partner.LoansRequest;
import com.hengpeng.itfinbase.message.partner.LoansResponse;
import com.hengpeng.itfinbase.message.partner.ModifyRequest;
import com.hengpeng.itfinbase.message.partner.NotifyRequestMsg;
import com.hengpeng.itfinbase.message.partner.NotifyResponseMsg;
import com.hengpeng.itfinbase.message.partner.OpenRequestMsg;
import com.hengpeng.itfinbase.message.partner.PayRequestMsg;
import com.hengpeng.itfinbase.message.partner.QueryAcctsRequestMsg;
import com.hengpeng.itfinbase.message.partner.QueryAcctsResponseMsg;
import com.hengpeng.itfinbase.message.partner.QueryBalanceRequest;
import com.hengpeng.itfinbase.message.partner.QueryCardInfoRequestMsg;
import com.hengpeng.itfinbase.message.partner.QueryCardInfoResponseMsg;
import com.hengpeng.itfinbase.message.partner.QueryTransStatRequest;
import com.hengpeng.itfinbase.message.partner.QueryTransStatResponse;
import com.hengpeng.itfinbase.message.partner.ReconciliationRequestMsg;
import com.hengpeng.itfinbase.message.partner.ReconciliationResponseMsg;
import com.hengpeng.itfinbase.message.partner.RepaymentRequestMsg;
import com.hengpeng.itfinbase.message.partner.SaveReconciliationRequestMsg;
import com.hengpeng.itfinbase.message.partner.SaveReconciliationResponseMsg;
import com.hengpeng.itfinbase.message.partner.TenderCancleRequest;
import com.hengpeng.itfinbase.message.partner.TenderCancleResponse;
import com.hengpeng.itfinbase.message.partner.TransferRequest;
import com.hengpeng.itfinbase.message.partner.TrfReconciliationRequestMsg;
import com.hengpeng.itfinbase.message.partner.TrfReconciliationResponseMsg;
import com.hengpeng.itfinbase.message.partner.UsrUnFreezeRequest;
import com.hengpeng.itfinbase.message.partner.UsrUnFreezeResponse;

/**
 * <pre>
 * 合作商处理器接口
 * </pre>
 * @author zhaojitao
 * @version 1.0, 2015-5-27
 */
public interface PartnerProcessor
{
	/**
	 * 开户
	 */
	ResponseMessage packageOpenRequest(OpenRequestMsg request);

	/**
	 * 开户通知
	 */
	NotifyResponseMsg openNotify(NotifyRequestMsg request);

	/**
	 * <pre>
	 * 企业用户开户
	 * </pre>
	 * @param request
	 */
	ResponseMessage packageCorpOpenRequest(CorpOpenRequestMsg request);

	/**
	 * <pre>
	 *  企业用户开户状态通知
	 * </pre>
	 * @param request
	 */
	NotifyResponseMsg corpOpenNotify(NotifyRequestMsg request);

	/**
	 * <pre>
	 * 企业用户开户状态查询
	 * </pre>
	 * @param request
	 */
	ResponseMessage queryCorpOpenRequest(CorpRegisterQueryRequest request);

	/**
	 * 邦卡结果通知
	 * @param request
	 * @return
	 */
	NotifyResponseMsg bindCardNotify(NotifyRequestMsg request);

	/**
	 * 正常批次还款
	 */
	ResponseMessage batchRepaymentRequest(RepaymentRequestMsg request);

	/**
	 * 正常批次还款通知
	 */
	NotifyResponseMsg batchRepaymentNotify(NotifyRequestMsg request);

	/**
	 * 还款
	 */
	ResponseMessage repaymentRequest(RepaymentRequestMsg request);

	/**
	 * 还款通知
	 */
	NotifyResponseMsg repaymentNotify(NotifyRequestMsg request);

	/**
	 * <pre>
	 * 余额查询(后台方式)
	 * </pre>
	 * @param request
	 * @return
	 */
	ResponseMessage queryBalanceBgRequest(QueryBalanceRequest request);

	/**
	 * <pre>
	 * 平台账户查询
	 * </pre>
	 * @param request
	 * @return
	 */
	QueryAcctsResponseMsg queryAcctsRequest(QueryAcctsRequestMsg request);

	/**
	 * <pre>
	 * 主动投标
	 * </pre>
	 * @param request
	 * @return
	 */
	InvestInfoResponseMsg packageInitiativeTenderRequest(InvestInfoRequestMsg request);

	/**
	 * 投资通知
	 */
	NotifyResponseMsg initiativeTenderNotify(NotifyRequestMsg request);

	/**
	 * 转账
	 */
	ResponseMessage packageTransferRequest(TransferRequest request);

	/**
	 * 转账通知
	 */
	NotifyResponseMsg transferNotify(NotifyRequestMsg request);

	/**
	 * 充值
	 */
	ResponseMessage packagePayRequest(PayRequestMsg request);

	/**
	 * 充值通知
	 */
	NotifyResponseMsg payNotify(NotifyRequestMsg request);

	/**
	 * 资料修改
	 */
	ResponseMessage packageModifyRequest(ModifyRequest request);

	/**
	 * 用户绑定银行卡
	 * @param request
	 * @return
	 */
	ResponseMessage packageBindCardRequest(BindCardRequest request);

	/**
	 * 提现请求
	 */
	ResponseMessage packageDrawRequest(CashRequestMsg request);

	/**
	 * 提现
	 */
	NotifyResponseMsg drawNotify(NotifyRequestMsg request);

	/**
	 * <pre>
	 * 标的信息录入
	 * </pre>
	 * @param request
	 * @return
	 */
	public AddBidInfoResponse addBidInfo(AddBidInfoRequest request);

	/**
	 * <pre>
	 * 标的放款
	 * </pre>
	 * @param request
	 * @return
	 */
	public LoansResponse loans(LoansRequest request);

	/**
	 * <pre>
	 * 标的放款返回通知
	 * </pre>
	 * @param request
	 * @return
	 */
	public NotifyResponseMsg loansNotify(NotifyRequestMsg request);

	/**
	 * <pre>
	 * 标的撤销
	 * </pre>
	 * @param request
	 * @return
	 */
	public TenderCancleResponse tenderCancle(TenderCancleRequest request);

	/**
	 * <pre>
	 * 交易查询
	 * </pre>
	 * @param request
	 * @return
	 */
	public QueryTransStatResponse queryTransStat(QueryTransStatRequest request);
	/**
	 * <pre>
	 * 银行卡查询接口
	 * </pre>
	 * @param request
	 * @return
	 */
	public QueryCardInfoResponseMsg queryCardInfo (QueryCardInfoRequestMsg request);
	/**
	 * <pre>
	 * 放款还款对账
	 * </pre>
	 * @param request
	 * @return
	 */
	public ReconciliationResponseMsg reconciliation(ReconciliationRequestMsg request);
	/**
	 * <pre>
	 * 商户扣款对账
	 * </pre>
	 * @param request
	 * @return
	 */
	public TrfReconciliationResponseMsg trfReconciliation(TrfReconciliationRequestMsg request);
	/**
	 * <pre>
	 * 充值对账
	 * </pre>
	 * @param request
	 * @return
	 */
	public SaveReconciliationResponseMsg saveReconciliation(SaveReconciliationRequestMsg request);
	/**
	 * <pre>
	 * 取现对账
	 * </pre>
	 * @param request
	 * @return
	 */
	public DrawReconciliationResponseMsg drawReconciliation(DrawReconciliationRequestMsg request);
	/**
	 * <pre>
	 * 债权转让
	 * </pre>
	 * @param reqeust
	 * @return
	 */
	public CreditAssignResponse packageCreditAssign(CreditAssignRequest reqeust);

	/**
	 * <pre>
	 * 流标资金解冻接口
	 * </pre>
	 * @param request
	 * @return
	 */
	public UsrUnFreezeResponse usrUnFreeze(UsrUnFreezeRequest request);

	/**
	 * <pre>
	 * 标的撤销返回通知
	 * </pre>
	 * @param request
	 * @return
	 */
	public NotifyResponseMsg usrUnFreezeNotify(NotifyRequestMsg request);
	/**
	 * <pre>
	 * 债权转让响应
	 * </pre>
	 * @param request
	 * @return
	 */
	public NotifyResponseMsg creditAssignNotify(NotifyRequestMsg request);
}
